home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / utilmus / mp_v3.lha / mpo.s < prev   
Text File  |  1996-04-26  |  13KB  |  698 lines

  1. EXECBASE    =4
  2. OPENLIB        =-408
  3. CLOSELIB    =-414
  4. OPEN        =-30
  5. CLOSE        =-36
  6. READ        =-42
  7. WRITE        =-48
  8. ALLOCMEM    =-198
  9. FREEMEM        =-210
  10. EXAMINE        =-102
  11. LOCK        =-84
  12. UNLOCK        =-90
  13.  
  14.     bra     MAIN_PARA
  15.     dc.b    '$VER: MultiPlayer (MP) V2.1 D.W & M.O.N Music Player.',$0
  16. ;
  17. ; MultiPlayer V2.1 David Whittaker & Maniacs Of Noise Player.
  18. ; Bug Update...
  19.  
  20. MAIN_PARA:
  21.     MOVEM.L    D0-D7/A0-A6,-(A7)
  22.     BSR    INITIALISE
  23.     BSR    BODY
  24.     BSR    TERMINATE
  25.     MOVEM.L    (A7)+,D0-D7/A0-A6
  26.     move.l    #0,d0    ; no error return code.
  27.     RTS
  28.  
  29. INITIALISE:
  30.     MOVE.L    A0,SAVECOMM
  31.     BSR    OPENDOS
  32.     CMP.W    #0,(ERRORFLAG)
  33.     BEQ    I1
  34.     RTS
  35. I1:    BSR    OPENSCREEN
  36.     CMP.W    #0,(ERRORFLAG)
  37.     BEQ    I2
  38.     BSR    CLOSEDOS
  39. I2:    RTS
  40.  
  41. BODY:
  42.     CMP.W    #0,(ERRORFLAG)        ; ANY ERRORS ?
  43.     BEQ    B1            ; OKAY, PERFORM THE BODY
  44.     RTS                ; OK, QUIT TO THE TERMINATE PARA.
  45. B1:    BSR    GETPARAMS        ; SEE WHAT PARAMETERS ARE GIVEN
  46.     CMP.W    #0,(ERRORFLAG)        ; NO PARAMETERS GIVEN
  47.     BEQ    DISPLAYHELP        ; EXIT WITH USAGE DISPLAY
  48.     CMP.W    #1,(ERRORFLAG)        ; ONLY FILENAME
  49.     BEQ    B2            ; CHECK, ALLOC, LOAD AND PLAY.
  50.     CMP.W    #2,(ERRORFLAG)        ; FILENAME AND SONGNO GIVEN
  51.     BEQ    B3            ; CHECK, ALLOC, LOAD AND PLAY SONG.
  52.     CMP.W    #3,(ERRORFLAG)        ; CHANGE SONG.
  53.     BEQ    B4            ; CHECKPLAYER, CHANGE SONG.
  54.     CMP.W    #9,(ERRORFLAG)
  55.     BEQ    B9
  56.     RTS
  57. DISPLAYHELP:
  58.     LEA    HELP,A0
  59.     BSR    PRINT
  60.     RTS
  61. B2:    
  62.     BSR    CHECK        ; CHECK FOR ALREADY PLAYING MOD AND FILE.
  63.     CMP.W    #1,(ERRORFLAG)    ; MP ALREADY PRESENT, UNLOAD.
  64.     BEQ    B2A        ; AND REPEAT LOADING PROCESS.
  65.     CMP.W    #2,(ERRORFLAG)    ; UNKNOWN PRG. USING $6C
  66.     BEQ    QUITT
  67. B2B:    BSR    ALLOC
  68.     CMP.W    #1,(ERRORFLAG)
  69.     BEQ    ALLOCATIONPROB
  70.     BSR    LOAD
  71.     CMP.W    #1,(ERRORFLAG)
  72.     BEQ    OUT
  73.     BSR    PLAY    
  74.     RTS
  75. B2A:
  76.     BSR    STOP
  77.     BSR    UNALLOC
  78.     BRA    B2
  79. B3:    
  80.     BSR    CHECK        ; CHECK FOR ALREADY PLAYING MOD AND FILE.
  81.     CMP.W    #0,(ERRORFLAG)    ; MP ALREADY PRESENT, UNLOAD.
  82.     BEQ    B3A        ; AND REPEAT LOADING PROCESS.
  83.     CMP.W    #2,(ERRORFLAG)    ; UNKNOWN PRG. USING $6C
  84.     BEQ    QUITT
  85.     BSR    CHANGESONG
  86.     RTS
  87. B3A:
  88.     LEA    NOTHINGPLAYING,A0
  89.     BSR    PRINT
  90.     RTS
  91. B4:    
  92.     BSR    STOP
  93.     CMP.W    #0,(ERRORFLAG)
  94.     BNE    QUITT
  95.     BSR    UNALLOC
  96.     RTS
  97. B9:    
  98.     LEA    BADCOMMAND,A0
  99.     BSR    PRINT
  100. QUITT:    RTS
  101.  
  102. TERMINATE:
  103.     BSR    CLOSESCREEN
  104.     BSR    CLOSEDOS
  105.     RTS
  106.     
  107. ;*******************************************************************
  108. HELP:    DC.B    'MPlayer - V2.1 by D.Gibbs Bug Update (c)1994-5.',$A,$D
  109.     DC.B    '©David Whittaker/Maniacs-Of-Noise Player.',$a,$d,$d
  110.     DC.B    'Usage:',$A,$D
  111.     DC.B    'Load        - MP -L <song> <song-no>',$A,$D
  112.     DC.B    'Change Song - MP -S <song-no>',$A,$D
  113.     DC.B    'Quit        - MP -Q',$A,$D,0
  114. NOTHINGPLAYING:    
  115.     DC.B    'No songs playing.',$A,$D,0
  116. ;********************************************************************
  117.  
  118. OPENDOS:
  119.     MOVE.W    #0,(ERRORFLAG)
  120.     LEA    DOSNAME,A1        ; LIBRARY NAME TO OPEN
  121.     MOVEQ    #0,D0            ; ANY VERSION
  122.     MOVE.L    EXECBASE,A6        ; USE EXEC.LIBRARY
  123.     JSR    OPENLIB(A6)        ; OPEN THE LIBRARY
  124.     MOVE.L    D0,DOSBASE        ; SAVE DOS BASE
  125.     BEQ    OPENOSERROR        ; ERROR
  126.     RTS
  127. OPENOSERROR:
  128.     MOVE.W    #1,(ERRORFLAG)
  129.     RTS
  130.  
  131. OPENSCREEN:
  132.     MOVE.W    #0,(ERRORFLAG)
  133.     MOVE.L    #CONSOLENAME,D1        ; NAME (*) THE CLI SCREEN
  134.     MOVE.L    #1005,D2        ; OPEN OLD
  135.     MOVE.L    DOSBASE,A6        ; THE DOSLIBRARY
  136.     JSR    OPEN(A6)        ; "OPEN" THE CON SCREEN
  137.     MOVE.L    D0,CONHANDLE        ; SAVE CON ADDRESS
  138.     BEQ    OPENSCREENERROR        ; ERROR FOUND
  139.     RTS
  140. OPENSCREENERROR:
  141.     MOVE.W    #1,(ERRORFLAG)
  142.     RTS
  143.  
  144. CLOSESCREEN:
  145.     MOVE.L    CONHANDLE,D1        ; GET CON ADDRESS
  146.     MOVE.L    DOSBASE,A6        ; USE DOSLIBRARY
  147.     JSR    CLOSE(A6)        ; "CLOSE" THE CON SCREEN
  148.     RTS
  149.  
  150. CLOSEDOS:
  151.     MOVE.L    DOSBASE,A1        ; GET DOSBASE
  152.     MOVE.L    EXECBASE,A6        ; USE EXEC.LIBRARY
  153.     JSR    CLOSELIB(A6)        ; CLOSE DOS LIBRARY
  154.     RTS
  155.  
  156. ;****************************************************************
  157.  
  158. DOSNAME:    DC.B    'dos.library',0
  159. DOSBASE:    DC.L    0
  160. CONSOLENAME:    DC.B    '*',0
  161. CONHANDLE:    DC.L    0
  162. ERRORFLAG:    DC.W    0
  163.  
  164. ;****************************************************************
  165.     
  166. GETPARAMS:
  167.     MOVE.W    #0,(ERRORFLAG)
  168.     MOVE.L    SAVECOMM,A0
  169.     CMP.B    #$A,(A0)
  170.     BEQ    OUT
  171.     CMP.B    #'-',(A0)+
  172.     BEQ    COMMAND
  173.     MOVE.W    #9,(ERRORFLAG)
  174. OUT:    RTS
  175. COMMAND:
  176.     BCLR    #5,(A0)
  177.     CMP.B    #'E',(A0)
  178.     BEQ    QUIETMODE
  179.     CMP.B    #'L',(A0)
  180.     BEQ    CLOAD
  181.     CMP.B    #'S',(A0)
  182.     BEQ    CCS
  183.     CMP.B    #'Q',(A0)
  184.     BEQ    UNLOAD_R
  185.     RTS    
  186. QUIETMODE:
  187.     MOVE.B    #1,QM
  188. CLOAD:
  189.     MOVE.L    #0,SONGSTART
  190.     ADD.L    #1,A0
  191.     CMP.B    #32,(A0)+
  192.     BNE    XTRAPARAM
  193.     MOVE.L    #FILENAME,A1
  194. CL1:    CMP.B    #$A,(A0)
  195.     BEQ    CL22
  196.     CMP.B    #32,(A0)
  197.     BEQ    CL1A
  198.     MOVE.B    (A0)+,(A1)+
  199.     BRA    CL1
  200. CL1A:
  201.     MOVE.B    #0,(A1)
  202.     ADD.L    #1,A0
  203.     CMP.B    #$A,1(A0)
  204.     BNE    XPE
  205.     CLR.L    D0
  206.     MOVE.B    (A0),D0
  207.     SUB.L    #48,D0
  208.     CMP.L    #9,D0
  209.     BGT    OOR
  210.     MOVE.L    D0,SONGSTART
  211. CL2:    MOVE.W    #1,(ERRORFLAG)
  212.     RTS
  213. CL22:
  214.     MOVE.B    #0,(A1)
  215.     BRA    CL2
  216. XPE:            ; LOAD : XTRA PARAMTER ERROR
  217.     MOVE.L    #0,SONGSTART
  218.     LEA    XPI,A0
  219.     BSR    PRINT
  220.     BRA    CL2
  221. OOR:            ; LOAD : OUT-OF-RANGE
  222.     MOVE.L    #0,SONGSTART
  223.     LEA    OORT,A0
  224.     BSR    PRINT
  225.     BRA    CL2
  226.  
  227. CCS:            ; CHANGE THE SONG
  228.     ADD.L    #1,A0
  229.     CMP.B    #32,(A0)
  230.     BNE    XTRAPARAM
  231.     ADD.L    #1,A0
  232.     CMP.B    #$A,1(A0)
  233.     BNE    CXPE
  234.     CLR.L    D0
  235.     MOVE.B    (A0),D0
  236.     SUB.L    #48,D0
  237.     CMP.L    #9,D0
  238.     BGT    COOR
  239.     cmp.l    #0,d0
  240.     blt    COOR
  241.     MOVE.L    D0,SONGSTART
  242.     MOVE.W    #2,(ERRORFLAG)
  243.     RTS    
  244. CXPE:            ; CHANGE : EXTRA PARAM ERROR
  245.     MOVE.W    #2,(ERRORFLAG)
  246.     MOVE.L    #0,SONGSTART
  247.     LEA    XPI,A0
  248.     BSR    PRINT
  249.     BRA    CCCS
  250. COOR:            ; CHANGE : OUT OF RANGE
  251.     MOVE.W    #2,(ERRORFLAG)
  252.     MOVE.L    #0,SONGSTART
  253.     LEA    OORT,A0
  254.     BSR    PRINT
  255. CCCS:    RTS
  256. UNLOAD_R:
  257.     MOVE.W    #3,(ERRORFLAG)
  258.     RTS
  259.  
  260. XTRAPARAM:
  261.     LEA    NEED_XTRA_PARAM,A0
  262.     BSR    PRINT
  263.     MOVE.W    #99,(ERRORFLAG)
  264.     RTS
  265.     
  266.     
  267. ;*********************************************************************
  268.  
  269. SONGSTART:        DC.L    0
  270. SAVECOMM:        DC.L    0
  271. BADCOMMAND:        DC.B    'Bad or Unknown Command.',$A,$D,0
  272. NEED_XTRA_PARAM:    DC.B    'Sorry, extra parameter required.',$a,$d,0
  273. XPI:            DC.B    'Extra Paramter Ignored.',$A,$D,0
  274. OORT:            DC.B    'Number out of range, number ignored.',$A,$D,0
  275.  
  276. ;*********************************************************************
  277.  
  278. CHECK:
  279.     MOVE.W    #0,(ERRORFLAG)
  280.     MOVE.L    $6C,A0
  281.     CMP.L    #$F00000,A0
  282.     BGT    MPR2
  283.     ADD.L    #$4,A0
  284.     CMP.L    #'MP21',(A0)+
  285.     BEQ    MPROUTINE
  286.     LEA    UNKNOWNROUT,A0
  287.     BSR    PRINT
  288.     MOVE.W    #2,(ERRORFLAG)
  289.     RTS
  290. MPROUTINE:
  291.     MOVE.L    (A0),MODULETYPE
  292.     MOVE.W    #1,(ERRORFLAG)
  293. MPR2:
  294.     MOVE.L    #FILENAME,D1
  295.     MOVE.L    #-2,D2
  296.     MOVE.L    DOSBASE,A6
  297.     JSR    LOCK(A6)
  298.     MOVE.L    D0,LOCKHANDLE
  299.     BEQ    FILE_NOT_FOUND
  300.     
  301.     MOVE.L    LOCKHANDLE,D1
  302.     MOVE.L    #FILEINFO,D2
  303.     MOVE.L    DOSBASE,A6
  304.     JSR    EXAMINE(A6)
  305.     BEQ    FILE_EXAMINE_ERROR
  306.     
  307.     MOVE.L    LOCKHANDLE,D1
  308.     MOVE.L    DOSBASE,A6
  309.     JSR    UNLOCK(A6)
  310.         
  311.     LEA    FILEINFO,A0
  312.     MOVE.L    124(A0),FILESIZE
  313.     MOVE.L    FILESIZE,D0
  314.     CMP.L    #$C8000,D0
  315.     BGT    FIXFILESIZE
  316.     RTS
  317. FIXFILESIZE:
  318.     MOVE.L    122(A0),FILESIZE
  319.     RTS
  320. FILE_NOT_FOUND:
  321.     LEA    FILENAME,A0
  322.     BSR    PRINT
  323.     LEA    FNF,A0
  324. LAB1:    BSR    PRINT
  325.     MOVE.W    #2,(ERRORFLAG)
  326.     RTS
  327. FILE_EXAMINE_ERROR:
  328.     LEA    FEE,A0
  329.     BRA    LAB1
  330.  
  331. ***********************************************************
  332.  
  333. LOCKHANDLE:    DC.L    0
  334. FILESIZE:    DC.L    0
  335. FILEINFO:    DS.B    260
  336. MODULETYPE:    DC.B    '----'
  337. FILENAME:    DS.B    32
  338. UNKNOWNROUT:    DC.B    'Something is using Interrupt 3, program aborted.'
  339.         DC.B    $A,$D,0
  340. FNF:        DC.B    'File not found.',$A,$D,0
  341. FEE:        DC.B    'Unable to examine file, program aborted.',$A,$D,0
  342.  
  343. ;***********************************************************
  344.  
  345. ALLOC:
  346.     MOVE.W    #0,(ERRORFLAG)
  347.     MOVE.L    FILESIZE,$150020
  348.  
  349.     MOVE.L    #INT_END-INT_ST,D0    ; SIZE OF INT ROUTINE
  350.     MOVE.L    #1,D1            ; ALLOC PUBLIC (FAST OR CHIP)
  351.     MOVE.L    EXECBASE,A6
  352.     JSR    ALLOCMEM(A6)
  353.     MOVE.L    D0,INT_START
  354.     BEQ    ALLOC_PROBLEM1
  355.     
  356.     MOVE.L    #INT_END-INT_ST,INT_SIZE
  357.  
  358.     MOVE.L    FILESIZE,D0        ; SIZE OF MODULE
  359.     MOVE.L    #2,D1            ; ALLOC (CHIP)
  360.     MOVE.L    EXECBASE,A6
  361.     JSR    ALLOCMEM(A6)
  362.     MOVE.L    D0,MOD_START
  363.     BEQ    ALLOC_PROBLEM2
  364.  
  365.     MOVE.L    FILESIZE,MOD_SIZE
  366.     RTS
  367.  
  368. ALLOC_PROBLEM1:
  369.     MOVE.W    #1,(ERRORFLAG)
  370.     RTS
  371. ALLOC_PROBLEM2:
  372.     LEA    AP2,A0
  373.     BSR    PRINT
  374.     MOVE.L    INT_START,D0
  375.     MOVE.L    INT_SIZE,D1
  376.     MOVE.L    EXECBASE,A6
  377.     JSR    FREEMEM(A6)
  378.     BRA    ALLOC_PROBLEM1
  379. ALLOCATIONPROB:
  380.     LEA    APM,A0
  381.     BSR    PRINT
  382.     RTS
  383.  
  384.     
  385. ;*************************************************************8
  386.  
  387. INT_START:    DC.L    0
  388. APM:        DC.B    'Not enough memory available for interrupt routine.',$A,$D,0
  389. AP2:        DC.B    'Not enough CHIP memory for music module available.',$A,$D,0
  390. ;        DC.B    0
  391.  
  392. ;*************************************************************8
  393.  
  394. UNALLOC:
  395.     MOVE.L    INT_START,A1
  396.     MOVE.L    INT_SIZE,D0
  397.     MOVE.L    EXECBASE,A6
  398.     JSR    FREEMEM(A6)
  399.     TST.L    D0
  400.     BEQ    UAE1
  401. REP1:
  402.     MOVE.L    MOD_START,A1
  403.     MOVE.L    MOD_SIZE,D0
  404.     MOVE.L    EXECBASE,A6
  405.     JSR    FREEMEM(A6)
  406.     TST.L    D0
  407.     BEQ    UAE2
  408.     RTS
  409. UAE1:
  410.     LEA    UAE1T,A0
  411.     BSR    PRINT
  412.     BRA    REP1
  413. UAE2:
  414.     LEA    UAE2T,A0
  415.     BSR    PRINT
  416.     RTS
  417. ;*************************************************************    
  418.  
  419. UAE1T:    DC.B    'Cannot UnAllocate Interrupt routine.',$A,$D,0
  420. UAE2T:    DC.B    'Cannot UnAllocate Module!!',$A,$D,0
  421.  
  422. ;*************************************************************    
  423.  
  424.  
  425. LOAD:
  426.     MOVE.W    #0,(ERRORFLAG)
  427.  
  428.     MOVE.L    #FILENAME,D1
  429.     MOVE.L    #1005,D2
  430.     MOVE.L    DOSBASE,A6
  431.     JSR    OPEN(A6)
  432.     MOVE.L    D0,FILEHANDLE
  433.     BEQ    UNABLE_TO_OPEN_FILE
  434.     
  435.     MOVE.L    FILEHANDLE,D1
  436.     MOVE.L    MOD_START,D2
  437.     MOVE.L    #4,D3
  438.     MOVE.L    DOSBASE,A6
  439.     JSR    READ(A6)
  440.     BEQ    READ_ERROR
  441.     
  442.     MOVE.L    MOD_START,A0
  443.     MOVE.W    MON_ID,D0
  444.     MOVE.L    DW_ID,D1
  445.  
  446.     CMP.W    (A0),D0
  447.     BEQ    LOAD_MON
  448.     CMP.L    (A0),D1
  449.     BEQ    LOAD_DW
  450.  
  451.     LEA    UNREC,A0
  452.     BSR    PRINT
  453.     MOVE.W    #1,(ERRORFLAG)
  454.     RTS
  455. LOAD_MON:
  456.     LEA    LOADING_MON,A0
  457.     BSR    PRINT
  458.     MOVE.L    #'MON.',D0
  459.     MOVE.L    D0,MOD_T
  460.     BRA    CONT_LOAD
  461. LOAD_DW:
  462.     LEA    LOADING_DW,A0
  463.     BSR    PRINT
  464.     MOVE.L    #'D.W.',D0
  465.     MOVE.L    D0,MOD_T
  466.     BRA    CONT_LOAD
  467. CONT_LOAD:
  468.     MOVE.L    FILEHANDLE,D1
  469.     MOVE.L    MOD_START,D2
  470.     ADD.L    #4,D2
  471.     MOVE.L    FILESIZE,D3
  472.     SUB.L    #4,D3
  473.     MOVE.L    DOSBASE,A6
  474.     JSR    READ(A6)
  475.     BEQ    READ_ERROR
  476. LOAD_CLOSE:
  477.     MOVE.L    FILEHANDLE,D1
  478.     MOVE.L    DOSBASE,A6
  479.     JSR    CLOSE(A6)
  480.     LEA    LOADED,A0
  481.     BSR    PRINT
  482.     RTS
  483. UNABLE_TO_OPEN_FILE:
  484.     MOVE.W    #1,(ERRORFLAG)
  485.     LEA    UTOF,A0
  486.     BSR    PRINT
  487.     RTS
  488. READ_ERROR:
  489.     MOVE.W    #1,(ERRORFLAG)
  490.     LEA    RE,A0
  491.     BSR    PRINT
  492.     RTS
  493.  
  494. ;*************************************************************    
  495.  
  496. FILEHANDLE:    DC.L    0
  497. UTOF:        DC.B    'Unable to open module file.',$A,$D,0
  498. RE:        DC.B    'Error while reading file.',$A,$D,0
  499. UNREC:        DC.B    'Unrecognised music format, loading aborted.',$A,$D,0
  500. LOADING_MON:    DC.B    'Maniacs-Of-Noise music file detected, loading...',0
  501. LOADING_DW:    DC.B    'David Whittaker music file detected, loading...',0
  502. LOADED:        DC.B    'Loaded.',$A,$D,0
  503.         DC.B    0
  504. DW_ID:        DC.B    $48,$E7,$F1,$FE
  505. MON_ID:        DC.B    $4E,$FA        ;$00,$2E
  506.  
  507. ;*************************************************************    
  508.  
  509. PLAY:
  510.     LEA    MOD_T,A0
  511.     CMP.L    #'MON.',(A0)
  512.     BEQ    PLAY_MON
  513.     LEA    MOD_T,A0
  514.     CMP.L    #'D.W.',(A0)
  515.     BEQ    PLAY_DW
  516.     LEA    SYSTEM_FALIURE,A0
  517.     BSR    PRINT
  518.     BSR    UNALLOC
  519.     MOVE.W    #1,(ERRORFLAG)
  520.     RTS
  521. PLAY_IT:
  522.     MOVE.L    $6C,A1
  523.      MOVE.L    #INTJ,A0
  524.     MOVE.L    A1,2(A0)
  525.  
  526.     MOVE.L    #INT_ST,A0
  527.     MOVE.L    INT_START,A1
  528.     MOVE.L    #INT_END-INT_ST,D0
  529. PL1:    MOVE.B    (A0)+,(A1)+
  530.     DBRA    D0,PL1
  531.  
  532.     MOVE.L    INT_START,A1
  533.     MOVE.L    A1,$6C
  534.     RTS
  535. PLAY_MON:
  536.     LEA    INTOS,A0
  537.     MOVE.W    #$4,2(A0)
  538.     CLR.L    D1
  539.     MOVE.L    #0,D0
  540.     MOVE.L    MOD_START,A0
  541.     JSR    0(A0)
  542.     MOVE.L    SONGSTART,D0
  543.     ADD.L    #1,D0
  544.     MOVE.L    #0,D1
  545.     MOVE.L    MOD_START,A0
  546.     JSR    8(A0)
  547.     MOVE.B    #2,$BFE001
  548.     BRA    PLAY_IT
  549. PLAY_DW:
  550.     LEA    INTOS,A0
  551.     MOVE.W    #$E,2(A0)
  552.     MOVE.L    SONGSTART,D0
  553.     MOVE.L    MOD_START,A0
  554.     JSR    0(A0)
  555.     BRA    PLAY_IT
  556.  
  557. ;*****************************************************
  558.  
  559. SYSTEM_FALIURE:    DC.B    'recoverable system error has occured.',$A,$D,0
  560.  
  561. ;*****************************************************
  562.  
  563. CHANGESONG:
  564.     MOVE.W    #0,(ERRORFLAG)
  565.     MOVE.L    $6C,A1
  566.     ADD.L    #$8,A1
  567.     MOVE.L    (A1),MOD_T
  568.     LEA    MOD_T,A0
  569.     CMP.L    #'MON.',(A0)
  570.     BEQ    CHANGE_MON
  571.     LEA    MOD_T,A0
  572.     CMP.L    #'D.W.',(A0)
  573.     BEQ    CHANGE_DW
  574.     LEA    SYSTEM_FALIURE,A0
  575.     BSR    PRINT
  576.     MOVE.W    #1,(ERRORFLAG)
  577.     RTS
  578. CHANGE_MON:
  579.     MOVE.L    $6C,A0
  580.     ADD.L    #$2A,A0
  581.     MOVE.L    (A0),MOD_START
  582.     CLR.L    D1
  583.     MOVE.L    #0,D0
  584.     MOVE.L    MOD_START,A0
  585.     JSR    0(A0)
  586.     MOVE.L    SONGSTART,D0
  587.     ADD.L    #1,D0
  588.     MOVE.L    #0,D1
  589.     MOVE.L    MOD_START,A0
  590.     JSR    8(A0)
  591.     MOVE.B    #2,$BFE001
  592.     RTS    
  593. CHANGE_DW:    
  594.     MOVE.L    $6C,A0
  595.     ADD.L    #$2A,A0
  596.     MOVE.L    (A0),A0
  597.     MOVE.L    SONGSTART,D0
  598.     JSR    0(A0)
  599.     RTS
  600. ;*****************************************************
  601.  
  602. STOP:
  603.     MOVE.W    #0,(ERRORFLAG)
  604.     MOVE.L    $6C,A1
  605.     MOVE.L    A1,INT_START
  606.     MOVE.L    $2A(A1),MOD_START
  607.     MOVE.L    $2E(A1),MOD_SIZE
  608.     MOVE.L    $32(A1),INT_SIZE
  609.     
  610.     MOVE.L    MOD_START,$150000
  611.     MOVE.L    MOD_SIZE,$150004
  612.     MOVE.L    INT_START,$150008
  613.     MOVE.L    INT_SIZE,$15000C
  614.     
  615.     ADD.L    #$8,A1
  616.     CMP.L    #'D.W.',(A1)
  617.     BEQ    OFF_DW
  618.     CMP.L    #'MON.',(A1)
  619.     BEQ    OFF_MON
  620.     LEA    UNKNOWN,A0
  621.     BSR    PRINT
  622.     MOVE.W    #9,(ERRORFLAG)
  623.     RTS
  624. OFF_DW:
  625.     MOVE.L    MOD_START,A0
  626.     JSR    $1C(A0)
  627.     MOVE.L    INT_START,A1
  628.     MOVE.L    $26(A1),A0
  629.     MOVE.L    A0,$6C
  630.     RTS
  631. OFF_MON:
  632.     MOVE.L    MOD_START,A0
  633.     CLR.L    D1
  634.     MOVE.L    #0,D0
  635.     MOVE.L    MOD_START,A0
  636.     JSR    0(A0)
  637.     MOVE.L    #0,D0
  638.     MOVE.L    #0,D1
  639.     MOVE.L    MOD_START,A0
  640.     JSR    8(A0)
  641.     MOVE.L    INT_START,A1
  642.     MOVE.L    $26(A1),A0
  643.     MOVE.L    A0,$6C
  644.     RTS
  645.  
  646. ;*****************************************************
  647.  
  648. QM:        DC.B    0,0
  649. UNKNOWN:    DC.B    'Unknown Music Module Format',$a,$d
  650.         DC.B    'not a David Whittaker or ',$a,$d
  651.         DC.B    'Maniacs Of Noise music module.',$A,$D,0
  652.  
  653. ;*****************************************************
  654.  
  655.     even
  656. PRINT:
  657.     CMP.B    #1,QM
  658.     BEQ    QMON
  659.     MOVEM.L    D0-D7/A0-A6,-(A7)    ; SAVE REGISTERS
  660.     MOVE.L    A0,A1            ; BACK UP PRINT ADDRESS
  661.     MOVE.L    #0,D0            ; RESET COUNTER
  662. P1:    CMP.B    #0,(A0)+        ; CHECK FOR NULL TERMINATOR
  663.     BEQ    P2            ; IF FOUND PRINT
  664.     ADD.L    #1,D0            ; ELSE ADD 1 TO COUNTER
  665.     BRA    P1            ; LOOP AROUND
  666. P2:    MOVE.L    CONHANDLE,D1        ; 
  667.     MOVE.L    A1,D2            ; MOVE BACKUP TO START
  668.     MOVE.L    D0,D3            ; SIZE OF STRING
  669.     MOVE.L    DOSBASE,A6        ; USE DOS.LIBRARY
  670.     JSR    WRITE(A6)        ; PRINT
  671.     MOVEM.L    (A7)+,D0-D7/A0-A6    ; RETURN REGISTERS
  672. QMON:    RTS                ; EXIT TO CALLING ROUTINE
  673.  
  674. ;***************************************************************
  675.  
  676.  
  677. INT_ST:
  678.     BRA    INT1
  679.     DC.B    'MP21'        ; ROUTINUE NAME (MP10) MP V2.1
  680. MOD_T:    DC.B    '----'        ; SONG TYPE (MON./D.W.)
  681. INT1:
  682.     MOVEM.L    D0-D7/A0-A6,-(A7)
  683.     MOVE.L    MOD_START(PC),A6
  684. INTOS:    JSR    0(A6)    
  685.     MOVE.W    #$2000,$DFF09C
  686.     MOVEM.L    (A7)+,D0-D7/A0-A6
  687. INTJ:    JMP    $0
  688. MOD_START:
  689.     DC.L    0
  690. MOD_SIZE:
  691.     DC.L    0
  692. INT_SIZE:
  693.     DC.L    0
  694. INT_END:
  695.  
  696. ; **************************************************************
  697.  
  698.